package com.gpj.flowable.core.service.impl;

import org.flowable.engine.history.HistoricActivityInstance;
import org.flowable.engine.repository.Deployment;
import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.runtime.ProcessInstance;
import org.flowable.task.api.Task;

import java.util.List;
import java.util.Map;

public interface IFlowService {
	/**
	 * 流程部署
	 * @param name 部署名称
	 * @param resources bpmn资源文件目录集合
	 */
	Deployment deploy(String name, String... resources);

	/**
	 * 根据流程部署ID获取流程定义信息
	 * @param deploymentId 流程部署ID
	 */
	List<ProcessDefinition> getDefinitionsByDeploymentId(String deploymentId);

	/**
	 * 启动流程
	 * @param definitionId 流程定义
	 * @param variables 流程变量
	 */
	ProcessInstance run(String definitionId, Map<String, Object> variables);

	/**
	 * 查询流程任务
	 * @param definitionId 流程定义
	 * @param instanceId 流程实例ID
	 * @param assignee 待审批人
	 */
	List<Task> getTasks(String definitionId, String instanceId, String assignee);

	/**
	 * 流程办理
	 * @param taskId 流程任务ID
	 * @param variables 流程变量
	 */
	void complete(String taskId, Map<String, Object> variables);

	/**
	 * 流程挂起
	 * @param definitionId 流程定义ID
	 */
	void suspend(String definitionId);

	/**
	 * 流程激活
	 * @param definitionId 流程定义ID
	 */
	void activate(String definitionId);

	/**
	 * 查询流程历史记录
	 * @param definitionId 流程定义ID
	 */
	List<HistoricActivityInstance> histories(String definitionId);
}
